//============================================================================================
/**
 * @file	mapdata_weather.c
 * @brief
 * @author	tamada GAME FREAK inc.
 * @date	2006.03.11
 */
//============================================================================================

#include "common.h"

#include "fieldsys.h"

#include "mapdata_weather.h"
#include "mapdata_weather_def.h"

#include "zonedata.h"

#include "system/pm_rtc.h"
#include "savedata/gametime.h"
#include "ev_time.h"

#include "fielddata/maptable/zone_id.h"

#define SP_DAY_NUM	(8)

static const u8 MonthDayTbl[SP_DAY_NUM*2] = {
	1,1,	//（元日）
	1,31,	//（2008年富士山観測で最も最低気温が低かった日）
	2,1, 	//（2008年富士山観測で最も最低気温が低かった日）
	2,29,	//（閏年）
	3,15,	//
	10,10,	//
	12,3,	//
	12,31,	//（大晦日）
};

//============================================================================================
//============================================================================================
//------------------------------------------------------------------
//
//	金銀ではシロガネ山のダイヤモンドダストのみの対応となる
//
//------------------------------------------------------------------
int WeatherData_Get(FIELDSYS_WORK * fsys, int now_zone_id)
{
	int weather;
	weather = ZoneData_GetWeatherID(now_zone_id);
	if (now_zone_id != ZONE_ID_D41R0108){
		return weather;
	}

	{
		u8 i;
		GMTIME * tm = SaveData_GetGameTime(fsys->savedata);
		OS_Printf("本日は%d月%d日\n",tm->sv_date.month,tm->sv_date.day);
		for (i=0;i<SP_DAY_NUM;i++){
			u8 month = MonthDayTbl[i*2];
			u8 day = MonthDayTbl[(i*2)+1];
			if ( (tm->sv_date.month == month) &&
				 (tm->sv_date.day == day) ) {
				if (EVTIME_IsPenaltyMode(fsys)) {
					//DS設定変更後のペナルティ期間はデフォルト天候にする
					return weather;
				}
				//シロガネ山の天候がダイヤモンドダストになる
				OS_Printf("天候をダイヤモンドダストに\n");
				return WEATHER_SYS_DIAMONDDUST;
			}
		}
	}

	return weather;

#if 0
	int weather;

	weather = ZoneData_GetWeatherID(now_zone_id);
#ifdef	DEBUG_ONLY_FOR_tamada
		OS_Printf("WEATHER ID = %d\n",weather);
#endif
	if (weather < WEATHER_SYS_CAL_START) {
		return weather;
	}

	{
		int ofs;
		GMTIME * tm = SaveData_GetGameTime(fsys->savedata);
		ofs = GF_RTC_GetDaysOffset(&tm->sv_date) - 1;
		GF_ASSERT(ofs >= 0 && ofs < 366);
		if (tm->sv_date.month > 2 && !GF_RTC_IsLeapYear(tm->sv_date.year)) {
			//うるう日を含んだテーブルなので、うるう年ではなく3月以降の場合は
			//オフセットに＋１する
			ofs ++;
		}
		if (EVTIME_IsPenaltyMode(fsys)) {
			//DS設定変更後のペナルティ期間はデフォルト天候＝1月1日の天候にする
			ofs = 1;
		}
#ifdef	DEBUG_ONLY_FOR_tamada
		OS_Printf("OFFSET = %d:", ofs);
#endif
		weather = WeatherCalendar[5 * ofs + (weather - WEATHER_SYS_CAL_START)];
#ifdef	DEBUG_ONLY_FOR_tamada
		OS_Printf("NEW WEATHER ID = %d\n",weather);
#endif
	}
	return weather;
#endif
}


//============================================================================================
//============================================================================================
//------------------------------------------------------------------
//------------------------------------------------------------------
